perm filename PNEW.SAI[PNT,HE]3 blob sn#492445 filedate 1980-01-21 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00004 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	ENTRY
C00003 00003
C00007 00004	PROCEDURE XERROR
C00010 ENDMK
C⊗;
ENTRY;
BEGIN "PNEW"
COMMENT routines which are not available in AL;
DEFINE $PNEW=TRUE,$ALTER_EGO=TRUE;
REQUIRE "HEADER.SAI" SOURCE_FILE;

DEFINE SGNEXT="'4000000";	! extend sign bit of input data ;
DEFINE OWPW   ="0";		! word for word transfer;
DEFINE TWRJ   ="'1000000";	! two words per word,right justified in each halfword;
DEFINE TWRM   ="'2000000";	! two words per word,in right most 32 bits;
DEFINE TWLM   ="'3000000";	! two words per word,in left most 32 bits;

INTEGER ARRAY TTMPBUF[1:FBUFFSIZ*2];
EXTERNAL PROCEDURE BUFFERUSAGE(STRING S);

PROCEDURE RSETBUFFCALL;
	BEGIN
	! force 11 integer and real buffers to be reset to beginning ;
	PEEKARRAY(NOTB11,8,NOTBOX);	! gets current status;
	INTPTR←INTBUF;		INTSIZ←0;	! reset pointers;
	FPPTR←FPBUF;		FPSIZ←0;
	POKEARRAY(NOTB11,8,NOTBOX);
	END;

PROCEDURE TGRAPHCALL;
	BEGIN
	INTEGER I;
	PEEKARRAY(NOTB11,8,NOTBOX);
	 ! note that intsiz and fpsiz may be incorrect;
	IF $INTSIZ←(INTPTR-INTBUF)/2 THEN
		BEGIN
		IF $INTSIZ<0 THEN ERROR("TGRAPH DISASTER: asking to transfer negative number of integers");
		IF $INTSIZ>IBUFFSIZ THEN
			ERROR("TGRAPH DISASTER: trying to transfer too many numbers; probably overran integer buffer");
		PEEKARRAY(INTBUF+MAP_OFFSET,$INTSIZ,$INBUF,SGNEXT);
		END;
	IF $FPSIZ←(FPPTR-FPBUF)/4 THEN
		BEGIN
		IF $FPSIZ<0 THEN ERROR("TGRAPH DISASTER: asking to transfer negative number of FP nums");
		IF $FPSIZ>FBUFFSIZ THEN
			ERROR("TGRAPH DISASTER: trying to transfer too many numbers; probably overran FP buffer");
!		PEEKARRAY(FPBUF+MAP_OFFSET,$FPSIZ,TMPBUF,TWLM);
		PEEKARRAY(FPBUF+MAP_OFFSET,$FPSIZ*2,TTMPBUF);
		FOR I←1 STEP 1 UNTIL $FPSIZ DO $FPBUF[I]←RFVAL(TTMPBUF[I*2-1],TTMPBUF[I*2]);
		END;
	$FPPTR←$INTPTR←0;
	$FPMAX←$FPMAX MAX $FPSIZ;
	$INTMAX←$INTMAX MAX $INTSIZ;
	WHILE $INTPTR<$INTSIZ DO TENINTERPRET;
	BUFFERUSAGE("TGRAPH");
	GRAPHCALL;
	END;
PROCEDURE XERROR;
	ERROR(TOKEN," is a dummy statement, use some other word");

INTERNAL PROCEDURE FOOCALL(INTEGER I);
	CASE I OF
	BEGIN
	[1]	RSETBUFFCALL;
	[2]	TGRAPHCALL;
	[3]	XERROR;
	[4]	XERROR
	END;

END "PNEW"